package ui;

import dao.IUserDao;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.IUserService;

/**
* 模拟客户端访问
*/
public class TestClient {

   public static void main(String[] args) {
       /**
        * 查看ApplicationContext的类图 发现他的顶层接口是BeanFactory
        * 他们都可以完成spring的IOC容器的初始化，那他们有什么区别呢？
        * BeanFactory是采用的延迟加载方式，容器初始化的时候并不会实例化对象，只有第一次使用的时候才会对其进行实例化
        * ApplicationContext采用的是立即加载方式，容器初始化的同事也会实例化对象
        * 测试方法很简单，因为spring实例化对象使用的是反射的方式， 即调用无参构造方法，我们只需要在无参构造中打印一句话
        * 观察BeanFactory和ApplicationContext在初始化的时候是否会打印那句话就可以了
        */
//       BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("bean.xml"));
       BeanFactory beanFactory = new ClassPathXmlApplicationContext("bean.xml");
       IUserService userService = (IUserService)beanFactory.getBean("userService");
       /**
        * 除了上述从spring容器中获取对象方式以外， 我们还可以使用以下方式
        */
       IUserDao userDao = beanFactory.getBean("userDao", IUserDao.class);

       System.out.println(userService + "\n " + userDao);
  }
}